<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 实现快速排序：从左边选出一个基准值，然后设置j为最右边的哨兵，i是最左边的哨兵，先移动j找到比基准值小的数，在移动i找到比基准值大的数
    // 然后交换i和j的数，然后j继续往左继续移动，i继续往右移动，持续进行上一步骤，直到i和j重合，重合位置为基准值的位置，然后左侧和右侧分别进行上述所有过程

    // 简单快速排序
    /**
     * 使用快速排序算法对数组进行升序排序
     * 注意：该实现对于空数组的处理存在缺陷，可能导致递归溢出
     * @param {Array} arr - 待排序的数组
     * @returns {Array} 排序后的新数组（升序排列）
     */
    function quickSort(arr) {
        // 递归终止条件：当数组长度为1时直接返回
        if(arr.length === 1) return arr

        // 选择基准值（首元素）并初始化左右子数组
        const base = arr[0]
        let left = []
        let right = []

        // 遍历数组元素，根据与基准值的大小关系分配至左右子数组
        for(let i = 1;i<arr.length;i++){
            if(arr[i] < base){
                left.push(arr[i])
            } else {
                right.push(arr[i])
            }
        }

        // 递归排序左右子数组，并与基准值合并为最终结果
        return [...quickSort(left),base,...quickSort(right)]
    }

    const arr = [5, 3, 8, 4, 2];
    console.log(quickSort(arr));  // 输出: [2, 3, 4, 5, 8]
</script>
</html>